package com.compasudea.polla.persistencia;

import java.util.Collection;
import java.util.Date;

import com.compasudea.polla.negocio.dto.PartidoDTO;
import com.compasudea.polla.negocio.dto.ResultadoDTO;
import com.compasudea.polla.negocio.dto.UsuarioDTO;
import com.compasudea.polla.persistencia.dao.DatabasePartidoDAO;
import com.compasudea.polla.persistencia.dao.PartidoDAO;

public class Partido {
	
	/** identificador del partido.*/
	private int idPartido;
	
	/** identificador de la fase.*/
	private int idFase;
	
	/** Fecha limite para asignar el marcador.*/
	private Date fechaLimite;

	/**
	 * Permite obtener el valor de la variable idPartido.
	 * @return valor de la variable idPartido.
	 */
	public int getIdPartido() {
		return idPartido;
	}

	/**
	 * Asigna el valor a la variable idPartido.
	 * @param idPartido valor a asignar a la variable.
	 */
	public void setIdPartido(int idPartido) {
		this.idPartido = idPartido;
	}

	/**
	 * Permite obtener el valor de la variable idFase.
	 * @return valor de la variable idFase.
	 */
	public int getIdFase() {
		return idFase;
	}

	/**
	 * Asigna el valor a la variable idFase.
	 * @param idFase valor a asignar a la variable.
	 */
	public void setIdFase(int idFase) {
		this.idFase = idFase;
	}

	/**
	 * Permite obtener el valor de la variable fechaLimite
	 * @return valor de la variable fechaLimite.
	 */
	public Date getFechaLimite() {
		return fechaLimite;
	}

	/**
	 * Asigna el valor a la variable fechaLimite.
	 * @param fechaLimite valor a asignar a la variable.
	 */
	public void setFechaLimite(Date fechaLimite) {
		this.fechaLimite = fechaLimite;
	}
	
	/**
	 * Permite obtener los partidos por grupo.
	 * @param grupo grupo al que pertenecen los equipos.
	 * @return lista de partidos por el grupo.
	 */
	public static Collection<PartidoDTO> getPartidosPorGrupo(String grupo) {
		PartidoDAO dao = new DatabasePartidoDAO();
	    return dao.getPartidosPorGrupo(grupo);		
	}
	
	/**
	 * Permite obtener el resultado asociado a un partido para un participante.
	 * @param partido Partido del que se desea buscar el resultado.
	 * @param user Usuario en sesion.
	 * @return Resultado en caso de que ya haya sido registrado.
	 */	
	public static ResultadoDTO getResultado(PartidoDTO partido, UsuarioDTO user) {
		
		PartidoDAO dao = new DatabasePartidoDAO();
		return dao.getResultado(partido, user);
	}
	
	/**
	 * Permite crear el resultado de un partido especifico ingresado por un usuario.
	 * @param partido DTO que contiene tanto la informacion del partido como del resultado.
	 * @param user Usuario que ingresa el resultado.
	 */
	public static void guardarResultadoPartido(PartidoDTO partido, UsuarioDTO user) {
		PartidoDAO dao = new DatabasePartidoDAO();
		dao.guardarResultadoPartido(partido, user);
	}
	
	/**
	 * Permite actualizar el resultado de un partido especifico ingresado por un usuario.
	 * @param partido DTO que contiene tanto la informacion del partido como del resultado.
	 * @param user Usuario que ingresa el resultado.
	 */
	public static void actualizarResultadoPartido(PartidoDTO partido, UsuarioDTO user) {
		PartidoDAO dao = new DatabasePartidoDAO();
		dao.actualizarResultadoPartido(partido, user);
	}
	
	/**
	 * Permite eliminar el resultado de un partido especifico ingresado por un usuario.
	 * @param partido DTO que contiene tanto la informacion del partido como del resultado.
	 * @param user Usuario que ingresa el resultado.
	 */
	public static void eliminarResultadoPartido(PartidoDTO partido, UsuarioDTO user) {
		PartidoDAO dao = new DatabasePartidoDAO();
		dao.eliminarResultadoPartido(partido, user);
	}
	
}
